package com.gksc.video.constant;

import com.gksc.video.enums.VideoFormat;

import java.util.HashSet;
import java.util.Set;

/**
 * @className: BusinessConstant
 * @description: 业务常量类
 * @author: Liao.yx
 * @email: 1229053515@qq.com
 * @create: 2021年05月14日 17时24分
 * @copyRight: 2020 liaoyongxiang All rights reserved.
 **/
public class BusinessConstant {
    /**
     * 采集参数
     */
    public static class GrabberOption {

        /**
         * 缓存大小
         * <p>
         * 原生的ffmpeg参数在对1920x1080的RTSP流进行播放时，花屏现象很严重，根据网上查的资料，可以通过增大“buffer_size”参数来提高画质，减少花屏现象
         */
        public static String BUFFER_SIZE = "buffer_size";
        /**
         * 超时断开连接时间 单位微秒
         * <p>
         * 原生的ffmpeg参数在打开RTSP流时，若连接不上，会出现卡死在打开函数的情况，在有些情况下这是很不好的，可以通过设置超时来改变卡死的情况
         */
        public static String TIMEOUT = "stimeout";
        /**
         * 最大延时
         */
        public static String MAX_DELAY = "max_delay";
        /**
         * 传输方式 tcp/udp
         * RTSP里有一种模式是Interleaved Mode，是在信令的TCP通道上承载RTP/RTCP。主要是为了穿防火墙的，还能利用TCP的可靠性
         */
        public static String RTSP_TRANS = "rtsp_transport";
        /**
         * 函数分析流的时间主要由传入的AVFormatContext的probesize 和 max_analyze_duration两个属性决定，
         * probesize是探测读入大小，默认值为32K；max_analyze_duration默认值为5S。
         * 在网络状况比较好的情况下可分别设置4K和1S，也可根据具体情况在起播画面效果、起播延迟、分析成功率等因素间取舍
         */
        public static String PROBE_SIZE = "probesize";
        public static String ANALYZE_DURATION = "analyzeduration";
    }
    /**
     * 解码参数
     * 权衡quality(视频质量)和encode speed(编码速度) values(值)： *
     * ultrafast(终极快),superfast(超级快), veryfast(非常快), faster(很快), fast(快), *
     * medium(中等), slow(慢), slower(很慢), veryslow(非常慢) *
     * ultrafast(终极快)提供最少的压缩（低编码器CPU）和最大的视频流大小；而veryslow(非常慢)提供最佳的压缩（高编码器CPU）的同时降低视频流的大小
     */
    public static class RecorderOption {

        /**
         * 编码延时
         */
        public static String ENCODE_DELAY = "tune";
        /**
         * 编码速度
         */
        public static String ENCODE_SPEED = "preset";
        /**
         * 视频质量 0~51；18~28是一个合理范围
         */
        public static String IMAGE_QUALITY = "crf";
        /**
         *
         */
        public static String FLV_FLAGS = "flvflags";
    }

    /**
     * 封装格式
     */
    public static final String PUSH_FORMAT = VideoFormat.flv.getCode();
    /**
     * 线程退出状态码
     */
    public static final Integer EXIT_SYSTEM = 0;//正常退出
    public static final Integer EXIT_HANDLER = 1;//手动中断
    /**
     * 打开方式
     */
    public static final int OPEN_STREAM_REAL = 1;//播放流
    public static final int OPEN_DEVICE_REAL = 2;//播放设备
    public static final int OPEN_STREAM_HIS = 3;//播放设备
    public static final int OPEN_DEVICE_HIS = 4;//播放设备
    /**
     * rtsp时间格式
     */
    public static final String HK_TIME_SDF = "HHmmss";
    public static final String HK_DATE_SDF = "yyyyMMdd";
    public static final String DH_DATETIME_SDF = "yyyy_MM_dd_HH_mm_ss";
    /**
     * 是否录制音频（0:不录制/1:录制）
     */
    public static int no_audio = 0;
    public static int need_audio = 1;
    /**
     * 回放任务类型
     */
    public static Set<Integer> history_task_type = new HashSet<>();
    static {
        history_task_type.add(OPEN_STREAM_HIS);
        history_task_type.add(OPEN_DEVICE_HIS);
    }

}
